Media content such as streamed video (including accompanying audio) is now able to be played on various types of client devices including smartphones, tablets, personal computers, large screen televisions and so forth. These device types sometimes can be grouped into classes of client devices, such as classes based on approximately how far typical users will be from the screen when viewing (e.g., “onefoot” device classes, “threefoot” device classes and “tenfoot” device classes).
The user interfaces that allow a video content offering such as a movie or television show episode to be selected for viewing, may need to be somewhat customized for each device or device class. For example, a content provider generally wants to give the user a desirable user experience when interacting to select from among its content offerings. Thus, a device in the “onefoot” device class may be given interactive icons or the like that are appropriately sized and positioned for such a device class, as opposed to the icons' sizing and positioning on a device in the “tenfoot” device class. Somewhat similarly, the video codecs/or and containers for streamed video can be specific to each device or device class; e.g., older devices may not support newer standards.
As new devices get introduced into the marketplace, various versions of software code are provided to support such devices, including the APIs and other mechanisms that such devices use to exchange data with a data service of the content provider. Similarly, software versions change for other reasons, such as when new data properties are introduced, or when others become obsolete or irrelevant, as well as to fix discovered bugs.
One solution to providing data to the various devices is for a data service to maintain and support different code bases and datasets for each such device, device class and/or software version as needed. When a client connects, the data service matches that client to a suitable code base and dataset, e.g., via a load balancer or the like that routes different clients to different servers. However this solution becomes a complex task as soon as more than just a small number of distinctions among devices and software versions need to be supported.
In some instances, it is also feasible to send the same data to each client device, and have complex client software on each device customize the data as needed for that client device. However, developing, maintaining and supporting such complex client software is also an extremely difficult problem, and is likely unworkable on low-powered devices that cannot process the data fast enough and/or do not have sufficient memory to make such customizations.